package com.xcity.game.achievement;

import com.xcity.game.achievement.helper.AdventureAttackHelper;
import com.xcity.game.achievement.helper.AdventureStealHelper;
import com.xcity.game.achievement.helper.BeRobbedHelper;
import com.xcity.game.achievement.helper.BuildingLevelUpTimesHelper;
import com.xcity.game.achievement.helper.BuildingsNumHelper;
import com.xcity.game.achievement.helper.BuyItemHelper;
import com.xcity.game.achievement.helper.CreateBuildingV2Helper;
import com.xcity.game.achievement.helper.CreateBuildingsHelper;
import com.xcity.game.achievement.helper.EmployeeQualityHelper;
import com.xcity.game.achievement.helper.EmployeeSizeHelper;
import com.xcity.game.achievement.helper.EnterRankingListHelper;
import com.xcity.game.achievement.helper.GoldAddedHelper;
import com.xcity.game.achievement.helper.GoldCostHelper;
import com.xcity.game.achievement.helper.LevelUpHelper;
import com.xcity.game.achievement.helper.PassPVEHelper;
import com.xcity.game.achievement.helper.RechargeSomeoneHelper;
import com.xcity.game.achievement.helper.RechargeSumHelper;
import com.xcity.game.achievement.helper.RobOthersHelper;
import com.xcity.game.achievement.helper.TakeMoneyFromBuildingHelper;
import com.xcity.game.achievement.helper.UseItemHelper;
import com.xcity.game.achievement.helper.UseSystemHelper;

public enum AchievementGroup implements AchievementHelper {

	UNKNOWN,
//	1	获得现金	1个参数：①完成该成就需获得的现金数量
	GOLD_ADDED(new GoldAddedHelper()),
//	2	消耗现金	1个参数：①完成该成就需消耗的现金数量
	GOLD_COST(new GoldCostHelper()),
//	3	进入排行榜	1个参数：①完成该成就需达到的最低排名
	ENTER_RANKING_LIST(new EnterRankingListHelper()),
//	4	建筑收钱	1个参数：①收钱总数量
	TAKE_MONEY_FROM_BUILDING(new TakeMoneyFromBuildingHelper()),
//	5	建筑收钱n次	1个参数：①收钱总次数
	TAKE_MONEY_TIMES(new TakeMoneyFromBuildingHelper()),
//	6	建造建筑群	"多个参数：（完成该条件所需建造的所有建筑id）
//	①建筑1id ②建筑2id ③建筑3id …… n.建筑nid"
	CREATE_BUILDINGS(new CreateBuildingsHelper()),
//	7	拥有建筑数量	1个参数：①完成该成就需拥有的建筑总数
	BUILDINGS_NUM(new BuildingsNumHelper()),
//	8	建筑升级	1个参数：①建筑等级
	@Deprecated
	BUILDING_LEVEL_UP,
//	9	建筑升级次数n	1个参数：①建筑累计升级次数
	BUILDING_LEVEL_UP_TIMES(new BuildingLevelUpTimesHelper()),
//	10	建造建筑v2	1个参数：①数量
	CREATE_BUILDING_V2(new CreateBuildingV2Helper()),
//	11	出售建筑n次	1个参数：①累计出售建筑次数
	@Deprecated
	SELL_BUILDING,
//	12	系统罚款n次	1个参数：①被罚款次数
	@Deprecated
	SYSTEM_FINE,
//	13	使用物品（or获得护盾）	2个参数：①物品id(-1表示任何物品)②完成该成就需使用的总次数
	USE_ITEM_OR_GET_SHIELD(new UseItemHelper()),
//	14	购买物品	2个参数：①物品id(-1表示任何物品)②完成该成就需购买的总次数
	BUY_ITEM(new BuyItemHelper()),
//	15	被掠夺	1个参数：①被掠夺的次数
	@Deprecated
	BE_ROBBED(new BeRobbedHelper()),
//	16	掠夺别人 	1个参数：①掠夺金额
	ROB_TOTAL_MONEY(new RobOthersHelper()),
//	17	充值金额	1个参数：①累计充值金额
	RECHARGE_SUM(new RechargeSumHelper()),
//	18	购买特定充值卡	1个参数：①充值id
	RECHARGE_SOMEONE(new RechargeSomeoneHelper()),
//	19	好友	2个参数：①好友数量②亲密度
	ADD_FRIEND(null), // TODO
//	20	功能使用	2个参数：①系统id②次数
	USE_SYSTEM_FUNCTION(new UseSystemHelper()),
//	21	人物等级	1个参数：①人物等级
	LEVEL_UP(new LevelUpHelper()),
//	22	员工数量	1个参数：①员工数量
	EMPLOYEE_SIZE(new EmployeeSizeHelper()),
//	23	员工品质	2个参数：①员工数量②员工品质范围（n-m）
	EMPLOYEE_QUALITY(new EmployeeQualityHelper()),
//	24	拓展通关	1个参数：①关卡id
	PASS_PVE(new PassPVEHelper()),
//	25	系统产出现金	2个参数：①完成该成就需获得的现金数量 ②产出系统（1、奇遇；2、建筑）
	GOLD_ADDED_BY_SYS(new GoldAddedHelper()),
//	26	偷窃次数	1个参数：①偷窃的次数
	ADVENTURE_STEAL(new AdventureStealHelper()),
//	27	攻击建筑次数	1个参数：①攻击的次数
	ADVENTURE_ATTACK(new AdventureAttackHelper()),
	;
	
	private final AchievementHelper helper;
	
	AchievementGroup() {
		this(null);
	}
	
	AchievementGroup(AchievementHelper helper) {
		this.helper = helper;
	}
	
	public boolean isAvailable() {
		return helper != null;
	}

	@Override
	public boolean update(Achievement refer, int... vals) {
		return helper != null && helper.update(refer, vals);
	}

	@Override
	public boolean isFinished(Achievement refer) {
		return helper != null && helper.isFinished(refer);
	}
	
	static AchievementGroup[] vals = values();
	public static AchievementGroup of(int index) {
		return index >= 0 && index < vals.length ? vals[index] : UNKNOWN;
	}
	
}
